# -*-coding: Utf-8 -*-
# @File : curd .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2023/9/30

from sqlalchemy.orm import Session

from coronavirus import models, schemas


# 查询城市的数据
def get_city(db: Session, city_id: int):
    # 通过数据库对象 查询模型表中的 City 模型 ，过滤出 City.id == 输入的城市ID 的数据取出来
    return db.query(models.City).filter(models.City.id == city_id).first()


# 通过省份查询城市数据
def get_city_by_name(db: Session, name: str):
    return db.query(models.City).filter(models.City.province == name).first()


# 获取到指定范围内的城市数据 -- 分页操作
def get_cities(db: Session, skip: int = 0, limit: int = 10):
    return db.query(models.City).offset(skip).limit(limit).all()


# 创建城市数据
def create_city(db: Session, city: schemas.CreateCity):
    # 初始化城市数据对象
    db_city = models.City(**city.dict())
    # 提交数据库
    db.add(db_city)
    # 执行事务
    db.commit()
    # 刷新数据
    db.refresh(db_city)
    # 将创建好的城市对象返回
    return db_city


# 获取到指定城市的指定范围内的数据
def get_data(db: Session, city: str = None, skip: int = 0, limit: int = 10):
    # 是否根据城市进行数据查询
    if city:
        return db.query(models.Data).filter(
            # 外键关联查询，这里不是像Django ORM那样Data.city.province
            models.Data.city.has(province=city))
    # 不按城市查询则 根据 模型类中的数据格式 进行数据查询切片并返回
    return db.query(models.Data).offset(skip).limit(limit).all()


# 创建城市详细数据
def create_city_data(db: Session, data: schemas.CreateData, city_id: int):
    # 初始化城市详细数据对象
    db_data = models.Data(**data.dict(), city_id=city_id)
    # 提交数据库
    db.add(db_data)
    # 执行事务
    db.commit()
    # 刷新数据
    db.refresh(db_data)
    # 将创建好的城市详细对象返回
    return db_data
